
keywords_url='https://gitee.com/zxkxz/xiaoai_hook/raw/master/keywords'
keywords=`curl -X GET ${keywords_url}`

hass_api_url='http://192.168.1.7:8123'

instruction_file="/tmp/mico_aivs_lab/instruction.log"
event_file="/tmp/mico_aivs_lab/event.log"


# 解决可能存在第一次文件不存在问题
touch $instruction_file && touch $event_file
instruction_md5=""
last_time=`date +%s`

while true;do
  # 计算md5值 
  new_md5=`md5sum $instruction_file | awk '{print $1}'`
  # 如果是第一次,就赋值比较用的md5
  [ -z $instruction_md5 ] && instruction_md5=$new_md5
  # 如果md5不等则文件变化
  if [[ $new_md5 != $instruction_md5 ]];then
    instruction_md5=$new_md5
    instruction_str=`tail -n 1 $instruction_file`
    if [ -n "$instruction_str" ];then
      s='"is_final":true'
      if echo $instruction_str | grep -q $s
      then
        text=`echo {$instruction_str} | sed -r 's/.*"text":"(.+)".*/\1/'`
        echo '== 关键词：'$text
        if ([[ ! -z $keywords ]] && [[  ! -z `echo "$text"|awk 'match($0,/'$keywords'/){print 1}'` ]]);then
      
          echo "== 试图停止"
          # 若干循环,直到resume成功一次直接跳出
          for is in $( seq 1 20 )
          do
            code=`ubus call mediaplayer player_play_operation {\"action\":\"resume\"}|awk -F 'code":' '{print $2}'`
            if [[ "$code" -eq "0" ]];then
              if [ $is -gt 5 ]
              then
                echo "== 停止成功"
                break
              fi
            fi
            #sleep 1
          done

          # 记录播放状态并暂停,方便在HA服务器处理逻辑的时候不会插播音乐,0为未播放,1为播放中,2为暂停
          play_status=`ubus -t 1 call mediaplayer player_get_play_status | awk -F 'status' '{print $2}' | cut -c 5`
          # echo $play_status
          ubus call mediaplayer player_play_operation {\"action\":\"pause\"} > /dev/null 2>&1

          #webhook_id=`echo {$keywords} | sed -r 's/.*'${text}'"(.+)".*/\1/'`
          echo '== WebHook id：'${text}
          result=`curl -X POST -o /dev/null -s -w %{http_code} ${hass_api_url}/api/webhook/${text}`
          tts=''
          if [ "$result" -eq "200" ]
          then
            echo '== '${text}'处理成功'
            tts='好的，为您'${text}
          else
            echo '== '${text}'处理失败(HTTP_CODE:'$result')'
            tts='小爱走神了，没有处理您的指令'
          fi

          if [[ -n "$tts" ]];then
            echo "== 播报TTS | TTS内容: $tts"
            ubus call mibrain text_to_speech "{\"text\":\"$tts\",\"save\":0}" > /dev/null 2>&1
            # 最长20秒TTS播报时间,20秒内如果播报完成跳出
            seq 1 20 | while read line;do
              status=`ubus -t 1 call mediaplayer player_get_play_status|awk -F 'status' '{print $2}'|cut -c 5`
              if [ "$status" -eq "0" ];then
                echo "== 播报TTS结束"
                break
              fi
              sleep 1
            done
          fi

          # 如果之前音乐是播放的则接着播放
          if [[ "$play_status" -eq "1" ]];then
            echo "== 继续播放音乐"
            # 这里延迟2秒是因为前面处理如果太快,可能引起恢复播放不成功
            sleep 2
            ubus call mediaplayer player_play_operation {\"action\":\"play\"} > /dev/null 2>&1
          fi
        fi
      fi
    fi 
  fi
done

